#+title: GNU Emacs IV: Org Capture, Org Agenda y Org Roam
#+author: dlmayhem
#+email: dlmayhem@riseup.net
#+date: 2023-12-19
#+language: es
#+options: num:nil toc:nil ':t

* Materiales

- Material del curso :: https://notabug.org/dlmayhem/emacs-hss.git
- Mi config personal :: https://notabug.org/dlmayhem/terror-emacs.git

* Contenidos

- Repaso
- Capture
- Org agenda
- Org-roam
  
* Repaso

- Referencias bibliográficas ::
  - Creamos nuestra base de datos bibliográfica en formato =.bib=.
  - Utilizamos citar (=C-c b=) para insertar referencias de manera rápida y sencilla.
- Presentaciones ::
  - Exportamos presentaciones al formato Beamer utilizando el modo org.
  - Realizamos presentaciones *desde* Emacs utilizando el paquete =org-tree-slide= y una configuración personalizada básica.

* Capture

** ¿Qué es?

- Capture nos permite tomar notas con rapidez y sin perder el foco de nuestro trabajo.
- El poder de Capture se manifiesta en la creación de plantillas de notas.
- Invocamos el comando =org-capture= con el atajo =C-c c=, según lo declaramos en nuestra configuración.

** Plantillas

#+begin_src elisp

  :custom
    (org-capture-templates
   '(("h" "Por hacer" entry
      (file+headline "agenda.org" "Cosas por hacer")
      "** TODO %?")
     ("r" "Reunión" entry
      (file+headline "agenda.org" "Cosas por hacer")
      "** REUNIÓN %^{¿De qué?|JGM|HSS|BANDA|DOJO|VECINOS}\n %^T")
     ("e" "Evento")
     ("ec" "Cumpleaños" entry
      (file+headline "agenda.org" "Eventos")
      "** CUMPLE %^{¿De quién?}\n SCHEDULED %^T")
     ("ef" "Funeral" entry
      (file+headline "agenda.org" "Eventos")
      "** FUNERAL %^{¿De quién?}\n SCHEDULED %^T")
     ("em" "Matrimonio" entry
      (file+headline "agenda.org" "Eventos")
      "** MATRI %^{¿De quién?}\n SCHEDULED %^T")))

#+end_src

* Agenda

- Ahora que hemos creado algunas plantillas de Capture, podemos utilizar nuestra agenda.
- El directorio en el que se almacenará es =~/org= y nuestro archivo se llamará =agenda.org=. Todo esto se puede cambiar en nuestro =init.el=.

  | ATAJO   | ACCIÓN                               |
  |---------+--------------------------------------|
  | C-c a a | Muestra la agenda semanal            |
  | C-c a t | Muestra la lista de TODOs            |
  | C-c a n | Muestra los dos elementos anteriores |
  
* Org-roam

- [[https://www.orgroam.com][Org-roam]] es un sistema basado en texto plano para la gestión de conocimiento.
- Está inspirado en el método [[https://en.wikipedia.org/wiki/Zettelkasten][Zettelkasten]].

** Método Zettelkasten

- Atribuido al sociólogo alemán Niklas Luhmann.
- Hace énfasis en conectar las ideas de manera no jerárquica.
- Consiste en notas breves en tarjetas, interconectadas entre sí mediante un ID en la esquina de la misma nota.

*** Notas fugaces

- Notas rápidas con información que en un futuro puede ser utilizada o desechada.
- Normalmente hace uso de =org-capture= o usa la funcionalidad =org-roam-dailies= de Org-roam.

*** Notas permanentes

- Se dividen en dos categorías.
  - Notas literarias :: Anotaciones breves sobre una fuente en particular --libros, webs, papers-- a las que quieres tener acceso posteriormente.
  - Notas conceptuales :: Deben ser auto explicativas y detalladas.

** Método tradicional vs. Zettelkasten

- Método tradicional :: Consiste en almacenar las notas en directorios jerárquicos, divididos por área temática, autor, etc.
- Método Zettelkasten :: Consiste en almacenar todas las notas en el mismo directorio y relacionarlas entre ellas utilizando --en el caso de Org-roam-- hipervínculos, logrando algo así como una wiki de conocimiento personal.

** Configuración básica

#+begin_src elisp :exports code

  (use-package org-roam
    :ensure t
    :init
    (setq org-roam-v2-ack t)
    :custom
    (org-roam-directory (file-truename "~/org/roam")) ;; utilizar directorio propio
    :bind (("C-c n l" . org-roam-buffer-toggle)
           ("C-c n f" . org-roam-node-find)
           ("C-c n i" . org-roam-node-insert)
           ("C-c n g" . org-roam-ui-mode) ;; originalmente org-roam-graph
           ("C-c n c" . org-roam-capture)
           ("C-c n j" . org-roam-dailies-capture-today))
    :config
    (setq org-roam-node-display-template
          (concat "${title:*} " (propertize "${tags:10}" 'face 'org-tag)))
    (org-roam-setup)
    (require 'org-roam-protocol))

#+end_src

** Atajos comunes

| ATAJO   | ACCIÓN                                              |
|---------+-----------------------------------------------------|
| C-c n f | Busca una nota y si no existe, la crea              |
| C-c n i | Inserta una nota que ya existe o crea una nueva     |
| C-c n g | Abre un gráfico con nuestras notas y sus relaciones |

* Org-Roam-UI

- [[https://github.com/org-roam/org-roam-ui][Org-Roam-UI]] es un frontend gráfico que nos permite visualizar nuestras notas y las relaciones entre ellas de una manera más comprensible.
- Una configuración básica:

#+begin_src elisp :exports code

  (use-package org-roam-ui
    :after org-roam
    :config
    (setq org-roam-ui-sync-theme t
          org-roam-ui-follow t
          org-roam-ui-update-on-save t
          org-roam-ui-open-on-start t))
  
#+end_src

* Templates

- Nuevamente, podemos encontrar una [[https://yewtu.be/watch?v=YxgA5z2R08I][introducción al sistema de templates de Org-roam]] (en inglés) en el canal de [[https://systemcrafters.net/][System Crafters]].
- Mis templates son almacenados en la ruta =~/.emacs.d/templates/roam/= y pueden ser revisados [[https://notabug.org/dlmayhem/terror-emacs/src/master/templates/roam][acá]].
- Agrego esto en mi archivo de configuración de Emacs para llamar a los templates:

#+begin_src elisp

  (org-roam-capture-templates
   '(("a" "Autor" plain
      (file "~/.emacs.d/templates/roam/author.org")
      :target (file+head "%<%Y%m%d%H%M%S>-${slug}.org"
                         "#+title: ${title}\n")
      :unnarrowed t)))

#+end_src

* Alternativas

- [[https://protesilaos.com/emacs/denote][Denote]], desarrollado por [[https://protesilaos.com/][Protesilaos Stavrou]].
- [[https://logseq.org/][Logseq]], una alternativa gráfica y fácil de utilizar.

* Recursos

** Lectura recomendada

- Capture ::
  - The Org Manual, [[https://www.gnu.org/software/emacs/manual/html_node/org/Using-capture.html][Using capture]].
  - The Org Manual, [[https://www.gnu.org/software/emacs/manual/html_node/org/Capture-templates.html][Capture templates]].
  - The Org Manual, [[https://orgmode.org/manual/Template-elements.html][Template elements]].
  - The Org Manual, [[https://orgmode.org/manual/Template-expansion.html][Template expansion]].
- Org Agenda ::
  - The Org Manual, [[https://orgmode.org/manual/Agenda-Views.html][Agenda Views]].
  - The Org Manual, [[https://www.gnu.org/software/emacs/manual/html_node/org/Weekly_002fdaily-agenda.html][Weekly/daily agenda]].
  - The Org Manual, [[https://orgmode.org/manual/Agenda-Commands.html][Commands in the Agenda Buffer]].
  - The Org Manual, [[https://orgmode.org/manual/Timestamps.html][Timestamps]].
  - The Org Manual, [[https://orgmode.org/manual/Creating-Timestamps.html][Creating Timestamps]].
- Método Zettelkasten ::
  - Org-roam User Manual, [[https://www.orgroam.com/manual.html#A-Brief-Introduction-to-the-Zettelkasten-Method][A Brief Introduction to the Zettelkasten Method]].
- Org-roam ::
  - Jethro Kuan, [[https://blog.jethro.dev/posts/introducing_org_roam/][Introducing Org Roam]].
  - Org-roam User Manual, [[https://www.orgroam.com/manual.html#The-Templating-System][The Templating System]].

** En YouTube

- Protesilaos Stavrou, [[https://yewtu.be/watch?v=qCdScs4YO8k][Emacs: Introduction to ORG-CAPTURE]].
- System Crafters, [[https://yewtu.be/watch?v=AyhPmypHDEw][Getting Started with Org Roam - Build a Second Brain in Emacs]].
- System Crafters, [[https://yewtu.be/watch?v=YxgA5z2R08I&][Capturing Notes Efficiently in Emacs with Org Roam]].
- System Crafters, [[https://yewtu.be/watch?v=QcRY_rsX0yY][Trying Out Prot's Denote, an Org Roam Alternative?]]

* No puedo dejar de mencionar...

| ATAJO | ACCIÓN                                                              | COMANDO            |
|-------+---------------------------------------------------------------------+--------------------|
| C-h t | El tutorial oficial de Emacs                                        | help-with-tutorial |
| C-h f | Muestra la documentación de alguna función y nos lleva a su código  | describe-function  |
| C-h v | Muestra la documentación de alguna variable y nos lleva a su código | describe-variable  |
| C-h ? | Muestra más opciones de ayuda                                       | help-for-help      |

* Paquetes utilizados

- [[https://github.com/org-roam/org-roam][Org-roam]]
- [[https://github.com/org-roam/org-roam-ui][Org-Roam-UI]]

* Conclusiones

- Emacs es un editor de textos libre, avanzado, auto documentado, extensible y personalizable.
- Emacs es mucho más que eso. Es un entorno Lisp capaz de ejecutar cualquier tarea que se nos ocurra.
- La comunidad de Emacs nos provee de pequeños programas que corren en su interior y que nos proporcionan casi un sistema operativo.

* TODO Pendientes

- [ ] Compilación de Emacs
- [ ] Planillas de cálculo en Org
- [ ] Introducción a Emacs Lisp

* Cierre

- Lo que hemos visto son sólo algunas configuraciones básicas recomendadas por mí, que pueden ser tomadas como punto de partida para crear una configuración propia.
- Gracias a todos por su asistencia y su interés.
- Gracias a la Escuela Hacktivista y al Hackerspace Santiago por el espacio y la infraestructura.

  *Happy hacking!*
